+-----------------------------------------------------+
| 3D Pinball for Windows ("PARTOUT") .DAT file format |
| AdrienTD                                            |
+-----------------------------------------------------+

//-- Header --//

+0x00:  File signature          BYTE*21
+0x15:  App name                BYTE*50
+0x47:  Description             BYTE*100
+0xAB:  File size               DWORD
+0xAF:  Number of files/groups  WORD
+0xB1:  Size of body            DWORD
+0xB5:  Unknown (0)             WORD

In 3D Pinball, the file signature is "PARTOUT(4.0)RESOURCE". The rest is
filled with 0.

//-- Body --//

The body is constitued of groups. Every group begins with a byte that tells
how many entries are in the group.

Every entry begins with a byte that specifies the type of the entry. A DWORD that
tells the size of the coming data follows the byte. Then there's some data for the
entry. However, if the type is 0, the type byte is followed by a short value,
and that's all.

Existing types:

Type            Meaning/comments
---------------------------------------------------
0               ?, does not have the 32bits size value, but a 16bits value (see above).
1               8 bpp bitmap
3               Group name
5               Palette (1 color is 1 DWORD, only present 1 time in PINBALL.DAT
                with a data size of 1024 bytes for 256 colors. Some colors are 0
                because their indexes are reserved by Windows.)
9               String (content)
10              Array of 16bits integer values
11              Array of 32bits floating point values (collision box, ...)
12              16 bpp bitmap (zMap)


//-- 8bpp bitmap data header --//
+0:     Resolution      BYTE	0=640x480, 1=800x600, 2=1024x768, -1=Load in all resolutions
+1:     Width           WORD
+3:     Height          WORD
+5:     X position      WORD
+7      Y position      WORD
+9:     Size of bitmap  DWORD
+13:    Flags           BYTE	bit0=Raw bmp align; bit1=DibBitmap, raw when 0; bit2=Spliced bitmap (aka skipline), combines bmp and zMap in RLE-like way
+14:    Bitmap data     BYTE*(DWORD@+9)


//-- 16bpp zMap data header --//
+0:     Width           WORD
+2:     Height          WORD
+4:     Pitch/2         WORD
+6:     Unknown (0)     DWORD
+10:    Unknown (0)     WORD
+12:    Unknown (80)    WORD
+14:    Bitmap data     BYTE*(DWORD@+9)

//-- 16bpp zMap data header full tilt --//
+0:     Resolution      BYTE	0=640x480, 1=800x600, 2=1024x768, -1=Load in all resolutions
+1:     Width           WORD
+3:     Height          WORD
+5:     Pitch/2         WORD
+7:     Unknown (0)     DWORD
+11:    Unknown (0)     WORD
+13:    Unknown (80)    WORD
+15:    Bitmap data     BYTE*(DWORD@+9)


//-- Pinball 3D remarkable groups --//

-- table_size
Entry type 10 contains 2 16-bit integers: first is width, second is height.

-- table_objects
In entry type 10, the first integer is unknown, but then comes a series of
16-bits integer pairs. Every pair represents an object of the table. The
first integer is the type of object, and the second is the number of
a group/resource in this data file.

Types of object (3D Pinball Space Cadet for Windows):
1000: ?
1001: Plunger
1002: Light (lite###)
1003: Left flipper
1004: Right flipper
1005: Bumper
1006: Yellow target
1007: Drain (no bmp)
1010: ? (no bmp)
1011: Bloc (dot between the flippers)
1012: kout (no bmp) (?)
1013: Gate
1014: Kicker
1015: Roll
1016: One way (no bmp) (?)
1017: Sink (no bmp) (?)
1018: Flag
1019: Red target
1020: Roll (the green circle that makes a weird sound when rolling on it)
1021: Ramp (no bmp)
1022: Ramp hole (no bmp)
1023: Demo (no bmp)
1024: Trip (no bmp)
1026: Lights (no bmp, list?)
1028: Bumpers list (one for attack, one for launch)
1029: kout (no bmp) (?, similar to 1012?)
1030: Fuel bargraph (list?)
1031: Sound
1033: Text box (score, ball counter, player number)

//-- Information --//

There's an article of the format at http://rewiki.regengedanken.de/.
I haven't read it completely, but some informations helped me a bit.

Another thing: There's nearly nothing about hacking the game on the web (even
though the Space Cadet game bundled with Windows is very popular).
What I've only seen when doing a (Google) web search is the 'hidden test'
cheat code. [as of 2017 or even less]


//-- Contact --//

Any questions? Contact me at [see my GitHub profile @AdrienTD for contacts] .

AdrienTD :)